/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.edu.unicen.twitter.suggest.backend.recommendation.Ranking;

import ar.edu.unicen.twitter.suggest.backend.recommendation.crawling.RecoleccionFactory;
import ar.edu.unicen.twitter.suggest.commons.dtos.Usuario;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author Alex
 */
public class RankingUsuariosHannonS6 extends RankingUsuariosHannon{

    RecoleccionFactory recoleccionFactory;
    
    public RankingUsuariosHannonS6(Usuario referencia, long totalUsuarios, RecoleccionFactory recoleccionFactory){
       super(referencia,totalUsuarios);
       this.recoleccionFactory=recoleccionFactory;
    }
    
    @Override
    public double getTfIdf(Usuario referencia, Usuario candidato){
        double score = 0;
        Collection<Usuario> seguidoresReferencia = recoleccionFactory.getSeguidores(referencia);
        if(seguidoresReferencia.size()>0){
            score = 0;
            Collection<Usuario> seguidoresCandidato = recoleccionFactory.getSeguidores(candidato);
            Set<Usuario> seguidoresCandidatoSet = new HashSet(seguidoresCandidato);
            for(Usuario seguidor:seguidoresReferencia){
                if(seguidoresCandidatoSet.contains(seguidor))
                {
                    score += Math.log(totalUsuarios/seguidor.getFollowsCount());
                }
            }
            score *= 2.0/(Math.pow(seguidoresReferencia.size(), 2)*seguidoresCandidato.size());
        }
        return score;
    }
}
